/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vue;

import controlleur.ControleurDeJeu;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.io.IOException;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import model.Carte;
import model.CarteDefensive;
import model.CarteOffensive;
import model.Joueur;
import model.PartieCarteObservateur;

/**
 *
 * Vue qui affiche une carte séléctionnée ainsi que son nom, ses effets, sa
 * description, ses pt d'attaque/def.
 *
 * Attributs : un ControleurDeJeu qui va servir à récupérer le Joueur 1, une
 * carte selection ainsi que des variables qui vont stocké sa description son
 * effet, son nom et ses points(pas obligatoire)F
 *
 * @author Antoine Thorr, Joana Santos, Samy Rida, Vicky Ngo Pagbe
 */
public class Selection_vue extends JPanel implements PartieCarteObservateur {

    //Attributs : un ControleurDeJeu qui va servir à récupérer le Joueur 1, une
//carte selection ainsi que des variables qui vont stocké sa description son
//effet, son nom et ses points(pas obligatoire)
    private ControleurDeJeu cjeu;
    private Carte selection;
    private JPanel statPan;
    private JPanel rightPan;
    private JPanel console;

  /**
   *
   * @param cjeu
   * @throws IOException
   */
  public Selection_vue(ControleurDeJeu cjeu) throws IOException {
        this.setVisible(true);
        //INITIALISATION DES PANELS
        this.cjeu = cjeu;
        this.statPan = new JPanel(new GridLayout(4, 1, 0, 5));
        this.rightPan = new JPanel(new GridLayout(2, 1));
        this.console = new JPanel(new GridLayout(6, 1));
        this.setLayout(new GridLayout(1, 2));

        this.actualiser();

    }

    /**
     * * Méthode qui permet d'actualiser le vue appelée directement dans le
     * constructeur
     */
    @Override
    public void actualiser() {
        // On regarde si une carte est sélectionnée
        if (this.cjeu.getJoueur().carteSelectionne() != null) {
            this.selection = this.cjeu.getJoueur().carteSelectionne();
        } else if (this.cjeu.getIA().carteSelectionne() != null) {
            this.selection = this.cjeu.getIA().carteSelectionne();
        } else {
            this.selection = null;
        }
        /**
         * **A LA PLACE DU REPAINT**
         */
        this.removeAll();
        this.statPan.removeAll();
        this.rightPan.removeAll();
        this.console.removeAll();
        this.setVisible(false);
        this.setVisible(true);
        //MISE EN PAGE DES STATS
        this.statPan.add(new JLabel("Carte sélectionnée"));
        if (this.selection != null) {
            //System.out.println(this.selection);
            //this.statPan.add(new JLabel("nom : " + this.selection.getNom()));
            //On verifie si c'est une carte offensive ou défensive
//            if (this.selection.getAttitude().equals("offensive")) {
//                CarteOffensive co = (CarteOffensive) this.selection;
//                this.statPan.add(new JLabel("point d'attaque : " + co.getPointAttaque()));
//                this.statPan.add(new JLabel("point de vie : " + co.getPointDeVie()));
//            } else {
//                CarteDefensive cd = (CarteDefensive) this.selection;
//                this.statPan.add(new JLabel("point de defense : " + cd.getVie()));
//                this.statPan.add(new JLabel("point de contre : " + cd.getPointContre()));
//            }
            //this.statPan.add(new JLabel("coût : " + this.selection.getCout()));
            JTextArea jt1 = new JTextArea("Description : " + this.selection.getType().getDescription());
            jt1.setLineWrap(true);
            jt1.setWrapStyleWord(true);
            jt1.setEditable(false);
            jt1.setFont(new Font("Courier new", Font.PLAIN, 12));
            JScrollPane sp1 = new JScrollPane(jt1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            sp1.getViewport().setOpaque(false);
            sp1.setOpaque(false);
            this.statPan.add(sp1);
//            this.statPan.add(jt1);

            JTextArea jt2 = new JTextArea("Anecdotes : " + this.selection.getType().getAnectodes());
            jt2.setLineWrap(true);
            jt2.setEditable(false);
            jt2.setWrapStyleWord(true);
            jt2.setFont(new Font("Courier new", Font.PLAIN, 12));
            JScrollPane sp2 = new JScrollPane(jt2, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            sp2.createVerticalScrollBar();
            sp2.setBackground(Color.white);
            this.statPan.add(sp2);
//            this.statPan.add(jt2);

            JTextArea jt3 = new JTextArea("Effet : " + this.selection.getType().getEffet());
            jt3.setLineWrap(true);
            jt3.setEditable(false);
            jt3.setWrapStyleWord(true);
            jt3.setFont(new Font("Courier new", Font.PLAIN, 12));
            this.statPan.add(jt3);
            jt1.setBackground(new Color(125, 167, 217));
            jt2.setBackground(new Color(125, 167, 217));
            jt3.setBackground(new Color(125, 167, 217));

        } else {
            this.statPan.add(new JLabel("description : "));
            this.statPan.add(new JLabel("anectodes :"));
            this.statPan.add(new JLabel("effets :"));
        }

        this.add(this.statPan);

        //MISE EN PAGE DE LA PARTIE DE DROITE
        //Mise en page de la carte selectionnée
        if (selection == null) {
            this.rightPan.add(new Carte_vue(0, 0));
        } else {
            this.rightPan.add(new Carte_vue(0, 0, this.selection));
        }
        //Mise en page de la console
        Font f = new Font("Courier new", Font.PLAIN, 12);
        JLabel c = new JLabel("> Console");
        c.setForeground(Color.green);
        c.setFont(f);
        this.console.add(c);
        String[] mes = this.cjeu.getFileMessage().getMessages();
        for (int i = 0; i < mes.length; i++) {
            JLabel jb = new JLabel(mes[i]);
            jb.setForeground(Color.green);
            jb.setFont(f);
            this.console.add(jb);
        }

        this.rightPan.add(this.console);
        this.add(this.rightPan);

        this.setBackground(new Color(125, 167, 217));
        this.statPan.setBackground(new Color(125, 167, 217));
        this.rightPan.setBackground(new Color(125, 167, 217));
        this.console.setBackground(Color.black);
        /**
         * *--------------------**
         */
    }

    /**
     * Retourne la carte séléctionnée
     *
     * @return Carte séléctionnée
     */
    public Carte getSelection() {
        return selection;
    }

    /**
     * Permet de définir la Carte dont on affiche le descriptif
     *
     * @param selection
     */
    public void setSelection(Carte selection) {
        this.selection = selection;
    }
}
